package io.renren.modules.sys.service;

import java.util.Map;
import java.util.Set;

/**
 * Title:       CacheService
 * Description: 1. 字典服务，内存存储键值对 2. 其他缓存服务
 *
 * @author : liugaoyang
 * date         : 2019/3/12 11:22
 */
public interface CacheService {

    /**  默认过期时长，单位：秒  下面是一天*/
    long DEFAULT_EXPIRE = 60 * 60 * 24;

    /**  不设置过期时长 */
    long NOT_EXPIRE = -1L;

    /**
     * 增加 key - value 形式的键值对至服务器内存中
     * 默认过期时间
     * @param key
     * @param value
     */
    void set(String key, Object value);

    /**
     * 增加 key - value 形式的键值对至服务器内存中
     * 允许自定义缓存过期时间
     * @param key
     * @param value
     * @param expire
     */
    void set(String key, Object value, long expire);

    /**
     * 根据Key得到缓存对象
     * @param key
     * @return
     */
    String get(String key);

    /**
     * 根据key删除缓存对象
     * @param key
     */
    void delete(String key);

    /**
     * 获取所有缓存
     * @return
     */
    Map<String, Object> getCacheAll();

    /**
     * 判断是否在缓存中
     * @param key
     * @return
     */
    boolean isContains(String key);

    /**
     * 缓存是否超时失效
     * @param key
     * @return
     */
    boolean isTimeOut(String key);

    /**
     * 清除所有缓存
     */
    void clearAll();

    /**
     * 获取所有key
     * @return
     */
    Set<String> getAllKeys();

    /**
     * 缓存监控任务 启动线程清空缓存对象
     */
    void startListen();

}
